🎖️GitЯра🎖️
Node / meshtastic / Meshtastic-Android / files / feature / firmware / src / commonMain / kotlin / org / meshtastic / feature / firmware / UsbUpdateSupport.kt
Displaying Raw • Download
feature/firmware/src/commonMain/kotlin/org/meshtastic/feature/firmware/UsbUpdateSupport.kt 2d20cd8a4708e2ef66e98d5259f3a97ec93f240a (2d20cd8a) Text, 4.98 KB
T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.feature.firmware
Tff7b72import T7ee787co.touchlab.kermit.Logger
Tff7b72import T7ee787kotlinx.coroutines.CancellationException
Tff7b72import T7ee787kotlinx.coroutines.delay
Tff7b72import T7ee787org.meshtastic.core.common.util.CommonUri
Tff7b72import T7ee787org.meshtastic.core.database.entity.FirmwareRelease
Tff7b72import T7ee787org.meshtastic.core.model.DeviceHardware
Tff7b72import T7ee787org.meshtastic.core.repository.NodeRepository
Tff7b72import T7ee787org.meshtastic.core.repository.RadioController
Tff7b72import T7ee787org.meshtastic.core.resources.Res
Tff7b72import T7ee787org.meshtastic.core.resources.UiText
Tff7b72import T7ee787org.meshtastic.core.resources.firmware_update_downloading_percent
Tff7b72import T7ee787org.meshtastic.core.resources.firmware_update_rebooting
Tff7b72import T7ee787org.meshtastic.core.resources.firmware_update_retrieval_failed
Tff7b72import T7ee787org.meshtastic.core.resources.firmware_update_usb_failed
Tff7b72import T7ee787org.meshtastic.core.resources.getStringSuspend
Tff7b72private Tff7b72const Tff7b72val Te6edf3USB_REBOOT_DELAY Tff7b72= T79c0ff5T79c0ff0T79c0ff0T79c0ff0L
Tff7b72private Tff7b72const Tff7b72val Te6edf3PERCENT_MAX Tff7b72= T79c0ff1T79c0ff0T79c0ff0
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffLongMethodTa5d6ff"Tb4b4b4)
Tff7b72internal Tff7b72suspend Tff7b72fun Td2a8ffperformUsbUpdateTb4b4b4(
Te6edf3releaseTb4b4b4: Te6edf3FirmwareReleaseTb4b4b4,
Te6edf3hardwareTb4b4b4: Te6edf3DeviceHardwareTb4b4b4,
Te6edf3firmwareUriTb4b4b4: Te6edf3CommonUri?Tb4b4b4,
Te6edf3radioControllerTb4b4b4: Te6edf3RadioControllerTb4b4b4,
Te6edf3nodeRepositoryTb4b4b4: Te6edf3NodeRepositoryTb4b4b4,
Te6edf3updateStateTb4b4b4: Tb4b4b4(Te6edf3FirmwareUpdateStateTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4,
Te6edf3retrieveUsbFirmwareTb4b4b4: Te6edf3suspend Tb4b4b4(Te6edf3FirmwareReleaseTb4b4b4, Te6edf3DeviceHardwareTb4b4b4, Tb4b4b4(Tffa657FloatTb4b4b4) Tff7b72-Tff7b72> Tffa657UnitTb4b4b4) Tff7b72-Tff7b72> Te6edf3FirmwareArtifact?Tb4b4b4,
Tb4b4b4)Tb4b4b4: Te6edf3FirmwareArtifact? Tb4b4b4{
Tff7b72var Te6edf3cleanupArtifactTb4b4b4: Te6edf3FirmwareArtifact? Tff7b72= Tff7b72null
Tff7b72return Tff7b72try Tb4b4b4{
Tff7b72val Te6edf3downloadingMsg Tff7b72= Te6edf3getStringSuspendTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3firmware_update_downloading_percentTb4b4b4, T79c0ff0Tb4b4b4)Tb4b4b4.Te6edf3stripFormatArgsTb4b4b4(Tb4b4b4)
Te6edf3updateStateTb4b4b4(
Te6edf3FirmwareUpdateStateTb4b4b4.Te6edf3DownloadingTb4b4b4(
Te6edf3ProgressStateTb4b4b4(Te6edf3message Tff7b72= Te6edf3UiTextTb4b4b4.Te6edf3DynamicStringTb4b4b4(Te6edf3downloadingMsgTb4b4b4)Tb4b4b4, Te6edf3progress Tff7b72= T79c0ff0fTb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72if Tb4b4b4(Te6edf3firmwareUri Tff7b72!Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3updateStateTb4b4b4(
Te6edf3FirmwareUpdateStateTb4b4b4.Te6edf3ProcessingTb4b4b4(Te6edf3ProgressStateTb4b4b4(Te6edf3UiTextTb4b4b4.Te6edf3ResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3firmware_update_rebootingTb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72val Te6edf3myNodeNum Tff7b72= Te6edf3nodeRepositoryTb4b4b4.Te6edf3myNodeInfoTb4b4b4.Te6edf3valueTff7b72?.Te6edf3myNodeNum Tff7b72?: T79c0ff0
Te6edf3radioControllerTb4b4b4.Te6edf3rebootToDfuTb4b4b4(Te6edf3myNodeNumTb4b4b4)
Te6edf3delayTb4b4b4(Te6edf3USB_REBOOT_DELAYTb4b4b4)
Tff7b72val Te6edf3sourceArtifact Tff7b72=
Te6edf3FirmwareArtifactTb4b4b4(Te6edf3uri Tff7b72= Te6edf3firmwareUriTb4b4b4, Te6edf3fileName Tff7b72= Te6edf3firmwareUriTb4b4b4.Te6edf3pathSegmentsTb4b4b4.Te6edf3lastOrNullTb4b4b4(Tb4b4b4) Tff7b72?: Ta5d6ff"Ta5d6fffirmware.uf2Ta5d6ff"Tb4b4b4)
Te6edf3updateStateTb4b4b4(Te6edf3FirmwareUpdateStateTb4b4b4.Te6edf3AwaitingFileSaveTb4b4b4(Te6edf3sourceArtifactTb4b4b4, Te6edf3sourceArtifactTb4b4b4.Te6edf3fileName Tff7b72?: Ta5d6ff"Ta5d6fffirmware.uf2Ta5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72null
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72val Te6edf3firmwareFile Tff7b72=
Te6edf3retrieveUsbFirmwareTb4b4b4(Te6edf3releaseTb4b4b4, Te6edf3hardwareTb4b4b4) Tb4b4b4{ Te6edf3progress Tff7b72-Tff7b72>
Tff7b72val Te6edf3percent Tff7b72= Tb4b4b4(Te6edf3progress Tff7b72* Te6edf3PERCENT_MAXTb4b4b4)Tb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4)
Te6edf3updateStateTb4b4b4(
Te6edf3FirmwareUpdateStateTb4b4b4.Te6edf3DownloadingTb4b4b4(
Te6edf3ProgressStateTb4b4b4(
Te6edf3message Tff7b72= Te6edf3UiTextTb4b4b4.Te6edf3DynamicStringTb4b4b4(Te6edf3downloadingMsgTb4b4b4)Tb4b4b4,
Te6edf3progress Tff7b72= Te6edf3progressTb4b4b4,
Te6edf3details Tff7b72= Ta5d6ff"Tffd700$Te6edf3percentTa5d6ff%Ta5d6ff"Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tb4b4b4}
Te6edf3cleanupArtifact Tff7b72= Te6edf3firmwareFile
Tff7b72if Tb4b4b4(Te6edf3firmwareFile Tff7b72=Tff7b72= Tff7b72nullTb4b4b4) Tb4b4b4{
Te6edf3updateStateTb4b4b4(
Te6edf3FirmwareUpdateStateTb4b4b4.Te6edf3ErrorTb4b4b4(
Te6edf3UiTextTb4b4b4.Te6edf3DynamicStringTb4b4b4(Te6edf3getStringSuspendTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3firmware_update_retrieval_failedTb4b4b4)Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72null
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72val Te6edf3processingState Tff7b72= Te6edf3ProgressStateTb4b4b4(Te6edf3UiTextTb4b4b4.Te6edf3ResourceTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3firmware_update_rebootingTb4b4b4)Tb4b4b4)
Te6edf3updateStateTb4b4b4(Te6edf3FirmwareUpdateStateTb4b4b4.Te6edf3ProcessingTb4b4b4(Te6edf3processingStateTb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3myNodeNum Tff7b72= Te6edf3nodeRepositoryTb4b4b4.Te6edf3myNodeInfoTb4b4b4.Te6edf3valueTff7b72?.Te6edf3myNodeNum Tff7b72?: T79c0ff0
Te6edf3radioControllerTb4b4b4.Te6edf3rebootToDfuTb4b4b4(Te6edf3myNodeNumTb4b4b4)
Te6edf3delayTb4b4b4(Te6edf3USB_REBOOT_DELAYTb4b4b4)
Tff7b72val Te6edf3fileName Tff7b72= Te6edf3firmwareFileTb4b4b4.Te6edf3fileName Tff7b72?: Ta5d6ff"Ta5d6fffirmware.uf2Ta5d6ff"
Tff7b72val Te6edf3fileSaveState Tff7b72= Te6edf3FirmwareUpdateStateTb4b4b4.Te6edf3AwaitingFileSaveTb4b4b4(Te6edf3firmwareFileTb4b4b4, Te6edf3fileNameTb4b4b4)
Te6edf3updateStateTb4b4b4(Te6edf3fileSaveStateTb4b4b4)
Te6edf3firmwareFile
Tb4b4b4}
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4: Te6edf3CancellationExceptionTb4b4b4) Tb4b4b4{
Tff7b72throw Te6edf3e
Tb4b4b4} Tff7b72catch Tb4b4b4(Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffTooGenericExceptionCaughtTa5d6ff"Tb4b4b4) Te6edf3eTb4b4b4: Te6edf3ExceptionTb4b4b4) Tb4b4b4{
Te6edf3LoggerTb4b4b4.Te6edf3eTb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{ Ta5d6ff"Ta5d6ffUSB Update failedTa5d6ff" Tb4b4b4}
Tff7b72val Te6edf3usbFailedMsg Tff7b72= Te6edf3getStringSuspendTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3firmware_update_usb_failedTb4b4b4)
Te6edf3updateStateTb4b4b4(Te6edf3FirmwareUpdateStateTb4b4b4.Te6edf3ErrorTb4b4b4(Te6edf3UiTextTb4b4b4.Te6edf3DynamicStringTb4b4b4(Te6edf3eTb4b4b4.Te6edf3message Tff7b72?: Te6edf3usbFailedMsgTb4b4b4)Tb4b4b4)Tb4b4b4)
Te6edf3cleanupArtifact
Tb4b4b4}
Tb4b4b4}
Served by rngit 1.5.0 - Generated in 0.05s